package com.hue.gulimail.gulimailproduct.service.impl;

import com.hue.gulimail.gulimailproduct.entity.AttrAttrgroupRelationEntity;
import com.hue.gulimail.gulimailproduct.entity.AttrGroupEntity;
import com.hue.gulimail.gulimailproduct.service.AttrAttrgroupRelationService;
import com.hue.gulimail.gulimailproduct.service.AttrGroupService;
import com.hue.gulimail.gulimailproduct.vo.SkuItemVo;
import com.hue.gulimail.gulimailproduct.vo.SpuItemAttrGroup;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hue.common.utils.PageUtils;
import com.hue.common.utils.Query;

import com.hue.gulimail.gulimailproduct.dao.ProductAttrValueDao;
import com.hue.gulimail.gulimailproduct.entity.ProductAttrValueEntity;
import com.hue.gulimail.gulimailproduct.service.ProductAttrValueService;


/**
 * @author yfq
 */
@Service("productAttrValueService")
public class ProductAttrValueServiceImpl extends ServiceImpl<ProductAttrValueDao, ProductAttrValueEntity> implements ProductAttrValueService {
    @Autowired
    private AttrAttrgroupRelationService attrAttrgroupRelationService;
    @Autowired
    private AttrGroupService attrGroupService;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<ProductAttrValueEntity> page = this.page(
                new Query<ProductAttrValueEntity>().getPage(params),
                new QueryWrapper<ProductAttrValueEntity>()
        );

        return new PageUtils(page);
    }

    /**
     * 根据spuId查询出所有的attrValue
     *
     * @param spuId
     * @return
     */
    @Override
    public List<ProductAttrValueEntity> getBySpuId(Long spuId) {
        QueryWrapper<ProductAttrValueEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("spu_id", spuId);
        List<ProductAttrValueEntity> attrValues = list(wrapper);
        return attrValues;
    }

//    @Override
//    public List<SkuItemVo.SpuItemAttrGroup> getSpuItemAttrGroupBySpuId(Long spuId) {
//        //查询spuId对应的商品属性值信息
//        QueryWrapper<ProductAttrValueEntity> productWrapper = new QueryWrapper<>();
//        productWrapper.eq("spu_id", spuId);
//        List<ProductAttrValueEntity> productAttrValues = list(productWrapper);
//
//        //将List<ProductAttrValueEntity>转换为Map<AttrId,SpuItemAttrGroup>
//        Map<Long, SkuItemVo.SpuBaseAttr> productAttrValueIdMap = new HashMap<>();
//        for (ProductAttrValueEntity productAttrValue : productAttrValues) {
//            if (!productAttrValueIdMap.containsKey(productAttrValue.getAttrId())) {
//                SkuItemVo.SpuBaseAttr spuBaseAttr = new SkuItemVo.SpuBaseAttr();
//                BeanUtils.copyProperties(productAttrValue, spuBaseAttr);
//                productAttrValueIdMap.put(productAttrValue.getAttrId(), spuBaseAttr);
//            }
//        }
//
//        //从productAttrValues中获取所有的AttrId
//        List<Long> attrIds = productAttrValues.stream().map(ProductAttrValueEntity::getAttrId).collect(Collectors.toList());
//
//        //根据所有的attrId获取AttrAttrGroupRelation
//        QueryWrapper<AttrAttrgroupRelationEntity> attrAttrGroupRelationWrapper = new QueryWrapper<>();
//        attrAttrGroupRelationWrapper.in("attr_id", attrIds);
//        List<AttrAttrgroupRelationEntity> attrAttrGroupRelations = attrAttrgroupRelationService.list(attrAttrGroupRelationWrapper);
//
//        //将List<AttrAttrgroupRelationEntity>转为Map<AttrGroupId,List<AttrAttrgroupRelationEntity>>
//        Map<Long, List<AttrAttrgroupRelationEntity>> attrGroupIdMap = new HashMap<>();
//        for (AttrAttrgroupRelationEntity attrAttrGroupRelation : attrAttrGroupRelations) {
//            if (attrGroupIdMap.containsKey(attrAttrGroupRelation.getAttrGroupId())) {
//                List<AttrAttrgroupRelationEntity> attrgroupRelationEntities = attrGroupIdMap.get(attrAttrGroupRelation.getAttrGroupId());
//                attrgroupRelationEntities.add(attrAttrGroupRelation);
//            } else {
//                List<AttrAttrgroupRelationEntity> attrgroupRelationEntities = new ArrayList<>();
//                attrgroupRelationEntities.add(attrAttrGroupRelation);
//                attrGroupIdMap.put(attrAttrGroupRelation.getAttrGroupId(), attrgroupRelationEntities);
//            }
//        }
//
//        //从attrAttrGroupRelations中获取所有的attrGroupId
//        List<Long> attrGroupIds = attrAttrGroupRelations.stream().map(AttrAttrgroupRelationEntity::getAttrGroupId).collect(Collectors.toList());
//
//        //根据所有的attrGroupId获取AttrGroup
//        QueryWrapper<AttrGroupEntity> attrGroupWrapper = new QueryWrapper<>();
//        attrGroupWrapper.in("attr_group_id", attrGroupIds);
//        List<AttrGroupEntity> attrGroups = attrGroupService.list(attrGroupWrapper);
//
//        //将AttrGroup转换为SpuItemAttrGroup
//        List<SkuItemVo.SpuItemAttrGroup> spuItemAttrGroups = attrGroups.stream().map(attrGroup -> {
//            SkuItemVo.SpuItemAttrGroup spuItemAttrGroup = new SkuItemVo.SpuItemAttrGroup();
//            spuItemAttrGroup.setGroupName(attrGroup.getAttrGroupName());
//            //将productAttrValue设置到对应的spuItemAttrGroup下
//            List<AttrAttrgroupRelationEntity> attrgroupRelationEntities = attrGroupIdMap.get(attrGroup.getAttrGroupId());
//            //得到每个attrGroup对应的所有attrId
//            List<Long> attrGroupInAttrIds = attrgroupRelationEntities.stream().map(attrAttrGroupRelation -> attrAttrGroupRelation.getAttrId()).collect(Collectors.toList());
//            List<SkuItemVo.SpuBaseAttr> attrGroupInAttrs = attrGroupInAttrIds.stream().map(attrGroupInAttrId -> productAttrValueIdMap.get(attrGroupInAttrId)).collect(Collectors.toList());
//            spuItemAttrGroup.setSpuBaseAttrs(attrGroupInAttrs);
//            return spuItemAttrGroup;
//        }).collect(Collectors.toList());
//
//        return spuItemAttrGroups;
//    }

    @Override
    public List<SpuItemAttrGroup> getSpuItemAttrGroupBySpuId(Long spuId,Long catalogId) {
        List<SpuItemAttrGroup> spuItemAttrGroups = baseMapper.getSpuItemAttrGroup(spuId, catalogId);
        return spuItemAttrGroups;
    }
}
